define(['common', 'toastr', 'bootstrapTable', 'bootstrapTableZh', 'jqueryValidationZh', 'icheck'], function(common, toastr) {
    var cardList = [];
    var baseData = {};
    return {
        init: function() {
            $("#cardTableData").bootstrapTable({
                method: 'post',
                silent: true,
                url: common.ip + "card?" + localStorage.loginUid,
                pageSize: 10,
                pageNumber: 1,
                sidePagination: "server",
                queryParamsType: '',
                pagination: true,
                paginationLoop: true,
                striped: true,
                responseHandler: function(res) {
                    common.heartbeat();
                    var tableData = { total: 0, rows: [] };
                    if (res.code === -4) {
                        common.login();
                    } else if (res.list && res.list.length > 0) {
                        res.list.forEach(function(item, index) {
                            item.index = index + 1;
                            item.option = '<a onclick="scope.addCard(' + index + ')">修改</a> | <a onclick="scope.imageCard(' + index + ')">图片管理</a> | <a onclick="scope.deleteCard(' + index + ')">删除</a>';
                        });
                        tableData.total = res.list.length;
                        tableData.rows = res.list;
                    }
                    cardList = tableData.rows;
                    baseData = res.baseData;
                    return tableData;
                }
            });
        },
        in: function() {
            $("#cardTableData").bootstrapTable('refresh');
        },
        addCard: function(index) {
            var self = this;
            require(['text!../pages/card/addCard.html'], function(tpl) {
                layer.open({
                    title: (index === undefined ? '添加贺卡' : '修改贺卡') + '<span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;（注意：图片大小限制在1M以内）</span>',
                    content: tpl,
                    area: ['700px'],
                    btn: ['确认', '取消'],
                    yes: function(index) {
                        $("#addCardForm").submit();
                    },
                    success: function(layero, layId) {
                        var row = index === undefined ? '' : cardList[index];
                        self.initCardFrom(row);
                        $("#addCardForm").validate({
                            submitHandler: function(from) {
                                common.uploadFile('card', from, true, true).done(function(result) {
                                    if (result.code === -4) {
                                        return;
                                    }
                                    if (result.code === -1) {
                                        toastr.error('数据异常，保存失败。');
                                        return;
                                    }
                                    if (result === 1 || result.length > 0) {
                                        toastr.success(index === undefined ? '添加成功。' : '更新成功。');
                                        layer.close(layId);
                                        $("#cardTableData").bootstrapTable('refresh');
                                    } else {
                                        toastr.error(index === undefined ? '添加失败。' : '更新失败。');
                                    }
                                });
                            }
                        });
                        $('.cardHelp').click(function() {
                            require(['text!../pages/card/cardHelp.html'], function(tpl) {
                                var el = $(tpl);
                                $('body').append(el);
                                el.find('.glyphicon-remove').click(function() {
                                    el.remove();
                                });
                                var move = el.find('.move');
                                var _move = false; //移动标记  
                                var _x, _y; //鼠标离控件左上角的相对位置  
                                el.find('.move').click(function() {
                                    //alert("click");//点击（松开后触发）  
                                }).mousedown(function(e) {
                                    _move = true;
                                    _x = e.pageX - parseInt(el.css("left"));
                                    _y = e.pageY - parseInt(el.css("top"));
                                    el.fadeTo(20, 0.8); //点击后开始拖动并透明显示  
                                });
                                $(document).mousemove(function(e) {
                                    if (_move) {
                                        var x = e.pageX - _x; //移动时根据鼠标位置计算控件左上角的绝对位置  
                                        var y = e.pageY - _y;
                                        el.css({ top: y, left: x }); //控件新位置  
                                    }
                                }).mouseup(function() {
                                    _move = false;
                                    el.fadeTo("fast", 1); //松开鼠标后停止移动并恢复成不透明  
                                });
                            });
                        });
                    }
                });
            });
        },
        imageCard: function(index) {
            var self = this;
            var row = index === undefined ? '' : cardList[index];
            require(['text!../pages/card/addImage.html'], function(tpl) {
                var lay = layer.open({
                    title: row.title + '贺卡图片管理' + '<span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;（注意：图片大小限制在1M以内）</span>',
                    content: tpl,
                    area: ['800px'],
                    btn: ['确认', '取消'],
                    yes: function(index) {
                        if ($('#addImageForm .redSelect').length !== 0) {
                            toastr.warning('发现被标红的错误输入，请完善后提交。');
                            return;
                        }
                        var allFile = $('input[type="file"]');
                        for (var i = 0; i < allFile.length; i++) {
                            if (allFile[i].files.length == 0 && !$(allFile[i]).attr('url')) {
                                toastr.warning('发现有添加的图片没选择图片文件，请完善后提交。');
                                return;
                            }
                        }
                        var fileIndex = [];
                        allFile.each(function(index, item) {
                            if (item.files.length == 1) {
                                fileIndex.push($(item).parent().parent().parent().attr('class').replace('form-group row', ''))
                            }
                        });
                        $('#fileIndex').val(fileIndex.join(','));
                        var ids = [];
                        $('#addImageForm > .form-group').each(function(index, item) {
                            ids.push($(this).attr('class').replace('form-group row', ''));
                        });
                        $('#ids').val(ids.join(','));
                        common.uploadFile('image', $('#addImageForm')[0], true, true).done(function(result) {
                            if (result.code === -4) {
                                return;
                            }
                            if (result.code === -1) {
                                toastr.error('数据异常，保存失败。');
                                return;
                            }
                            if (result === 1 || result.length > 0) {
                                toastr.success('保存成功。');
                                layer.close(index);
                            } else {
                                toastr.error('保存失败。');
                            }
                        });
                    },
                    success: function(layero, layId) {
                        common.handleAjax('image', { code: 1, card: row.id }, true, true).done(function(result) {
                            if (result.code === -4 || result.code === -1) {
                                result = [];
                            }
                            $('#folder').val('images/' + row.id);
                            $('#card').val(row.id);
                            self.initImageFrom(result);
                        });
                        $('.row-help').click(function() {
                            require(['text!../pages/card/imageHelp.html'], function(tpl) {
                                var el = $(tpl);
                                $('body').append(el);
                                el.find('.glyphicon-remove').click(function() {
                                    el.remove();
                                });
                                var move = el.find('.move');
                                var _move = false; //移动标记  
                                var _x, _y; //鼠标离控件左上角的相对位置  
                                el.find('.move').click(function() {
                                    //alert("click");//点击（松开后触发）  
                                }).mousedown(function(e) {
                                    _move = true;
                                    _x = e.pageX - parseInt(el.css("left"));
                                    _y = e.pageY - parseInt(el.css("top"));
                                    el.fadeTo(20, 0.8); //点击后开始拖动并透明显示  
                                });
                                $(document).mousemove(function(e) {
                                    if (_move) {
                                        var x = e.pageX - _x; //移动时根据鼠标位置计算控件左上角的绝对位置  
                                        var y = e.pageY - _y;
                                        el.css({ top: y, left: x }); //控件新位置  
                                    }
                                }).mouseup(function() {
                                    _move = false;
                                    el.fadeTo("fast", 1); //松开鼠标后停止移动并恢复成不透明  
                                });
                            });
                        });
                    }
                });
                layer.full(lay);
            });
        },
        deleteCard: function(index) {
            layer.confirm('确定删除这个贺卡吗？', { btn: ['确认', '取消'] }, function(layId) {
                common.handleAjax('card', { code: 3, id: cardList[index].id }, true, true).done(function(result) {
                    if (result.code === -1) {
                        layer.alert('删除失败。');
                        return;
                    }
                    if (result.code === -4) {
                        return;
                    }
                    if (result === 1) {
                        toastr.success('删除成功。');
                        layer.close(layId);
                        $("#cardTableData").bootstrapTable('refresh');
                    } else {
                        toastr.error('删除失败。');
                    }
                });
            });
        },
        initCardFrom: function(row) {
            $('.icheckInput').iCheck({
                checkboxClass: 'icheckbox_square-green',
                radioClass: 'icheckbox_square-green'
            });
            $('#style').append('<option value="">--请选择--</option>');
            baseData.styleList.forEach(function(item) {
                $('#style').append('<option value="' + item.id + '">' + item.name + '</option>');
            });
            $('#kind').append('<option value="">--请选择--</option>');
            baseData.kindList.forEach(function(item) {
                $('#kind').append('<option value="' + item.id + '">' + item.name + '</option>');
            });
            $('#music').append('<option value="">--请选择--</option>');
            baseData.musicList.forEach(function(item) {
                $('#music').append('<option value="' + item.id + '">' + item.name + '</option>');
            });
            $('#wish').append('<option value="">--请选择--</option>');
            baseData.wishList.forEach(function(item) {
                $('#wish').append('<option value="' + item.id + '">' + item.mini + '</option>');
            });
            if (row) {
                $('#code').val(2 + '');
                $('#id').val(row.id + '');
                $('#title').val(row.title + '');
                $('#style').val(row.style + '');
                $('#kind').val(row.kind + '');
                $('#music').val(row.music + '');
                $('#wish').val(row.wish + '');
                $('#wish_style').val(row.wish_style + '');
                if (row.show == 1) {
                    $('input[name="show"]').eq(0).iCheck('check');
                }
                $('#display_url').removeAttr('required');
                if (row.swiper == 0) {
                    $('input[name="swiper"]').eq(1).iCheck('check');
                }
                $('#swiper_url').removeAttr('required');
                if (row.recommend == 0) {
                    $('input[name="recommend"]').eq(1).iCheck('check');
                }
                if (row.float == 0) {
                    $('input[name="float"]').eq(1).iCheck('check');
                }
                $('#scroll').val(row.scroll + '');
            } else {
                $('#code').val(1);
                $('#id').val(((Date.now() + Math.ceil(Math.random() * 24)) + '').substr(-8));
                $('#display_url').attr('required', true);
            }
            $('#folder').val('images/' + $('#id').val());
            $('input[name="swiper"]').eq(0).on('ifChecked', function() {
                if (!row.swiper_url) {
                    $('#swiper_url').attr('required', true);
                }
            });
            $('input[name="swiper"]').eq(1).on('ifChecked', function() {
                $('#swiper_url').removeAttr('required');
                $('#swiper_url-error').text('');
            });
            $('input[type="file"]').mouseover(function() {
                var img = $(this).parent().find('img');
                var src = row[$(this).attr('name')];
                if (!src) return;
                if (img.attr('src') != src) {
                    img.attr('src', common.src + src);
                }
                img.parent().show();
            }).mouseout(function() {
                var img = $(this).parent().find('.viewImgDiv');
                img.hide();
            });
            $('#wish_style').blur(function() {
                $(this).val(common.formatStyle($(this).val()));
            });
            $('[data-toggle="tooltip"]').tooltip();
        },
        initImageFrom: function(result) {
            var self = this;
            require(['text!../pages/card/imageRow.html'], function(tpl) {
                if (result.images.length === 0) {
                    result.count++;
                    result.images.push({
                        id: result.count,
                        url: '',
                        image: '',
                        background: 1
                    });
                }
                var select = [];
                result.images.forEach(function(item) {
                    if (item.background == 1) {
                        select.push(item.id);
                    }
                });
                result.images.forEach(function(item) {
                    self.initImageRowFun(tpl, item, select);
                });
                $('#addImageForm').on('click', '.addImg', function() {
                    if ($('#addImageForm > .form-group').length == 50) {
                        toastr.warning('一个贺卡最多添加50个图片，已有50张，无法添加。');
                        return;
                    }
                    var prev = $('.row-add').prev();
                    if (prev.length !== 0) {
                        var file = prev.find('input[type="file"]');
                        if (file[0].files.length === 0 && !file.attr('url')) {
                            toastr.warning('请填写上一个图片信息再添加。');
                            return;
                        }
                    }
                    result.count++;
                    self.initImageRowFun(tpl, {
                        id: result.count,
                        url: '',
                        image: '',
                        background: 1
                    }, select, 'add');
                });
                $('#addImageForm').on('click', '.minusImg', function() {
                    var prev = $(this).parent().parent().parent();
                    var imageId = prev.attr('class').replace('form-group row', '');
                    var s = $('select');
                    for (var i = 0; i < s.length; i++) {
                        if ($(s[i]).val() == imageId) {
                            alert('此背景图片上面有图片存在，无法删除。');
                            return;
                        }
                    }
                    if (confirm('确定删除这个图片吗？')) {
                        prev.animate({ height: 0, margin: 0, padding: 0 }, "slow", function() {
                            prev.remove();
                        });
                    }
                });
            });
        },
        initImageRowFun: function(tpl, item, select, add) {
            var imageTpl = tpl + '',
                code = 'row' + (item.id);
            imageTpl = imageTpl.replace(/row1/g, code);
            if (add) {
                var el = $(imageTpl).css('opacity', 0);
                $('.row-add').before(el);
                $('.layui-layer-content').animate({ scrollTop: $('.layui-layer-content > div').height() }, function() {
                    el.animate({ 'opacity': 1 }, 'slow');
                });
            } else {
                var el = $(imageTpl);
                $('.row-add').before(el);
            }
            el.find('.badge').html(item.id);
            el.find('input[type="file"]').attr('url', item.url).mouseover(function() {
                var img = $(this).parent().find('img');
                var src = $(this).attr('url');
                if (!src) return;
                if (img.attr('src') != src) {
                    img.attr('src', common.src + src);
                }
                img.parent().show();
            }).mouseout(function() {
                var img = $(this).parent().find('.viewImgDiv_');
                img.hide();
            });
            var selectEl = el.find('select').append('<option value="">--请选择--</option>');
            select.forEach(function(o) {
                selectEl.append('<option value="' + o + '" ' + (item.image == o ? "selected" : "") + '>' + o + '</option>');
            });
            selectEl.click(function() {
                var val = $(this).val();
                $(this).children().remove();
                $(this).append('<option value="">--请选择--</option>');
                var ccc = $('.icheckInput:checked[value="1"]');
                if (ccc.length === 0) {
                    $(this).val('');
                    return;
                }
                var self = this;
                ccc.each(function(index, item) {
                    var v = $(item).parent().parent().parent().parent().parent().attr('class').replace('form-group row', '');
                    $(self).append('<option value="' + v + '" ' + (val == v ? "selected" : "") + '>' + v + '</option>');
                });
            });
            var icheck = el.find('.icheckInput');
            icheck.iCheck({
                checkboxClass: 'icheckbox_square-green',
                radioClass: 'icheckbox_square-green'
            });
            icheck.eq(0).on('ifChecked', function() {
                var ic = $('.icheckInput:checked[value="1"]').length;
                if (ic > 5) {
                    toastr.warning('一个贺卡最多五张背景图片，无法再设置背景图片。');
                    setTimeout(function() {
                        icheck.eq(1).iCheck('check');
                    }, 50);
                    return;
                }
                selectEl.val('');
                selectEl.removeClass('redSelect').parent().prev().removeClass('redSelect');
                selectEl.attr('disabled', true);
                icheck.eq(2).iCheck('enable');
                el.find('input[name="' + code + '_style"]').val('').attr('readonly', true);
                el.find('input[name="' + code + '_endStyle"]').val('').attr('readonly', true);
                el.find('input[name="' + code + '_animation"]').val('').attr('readonly', true);
            });
            icheck.eq(1).on('ifChecked', function() {
                var selectValEl = $('select');
                // var curRow = $(this).parent().parent().parent().parent().parent();
                // var curRowId = curRow.attr('class').replace('form-group row', '');
                for (var i = 0; i < selectValEl.length; i++) {
                    if ($(selectValEl[i]).val() == item.id) { // curRowId
                        toastr.warning('此背景图片上面有图片存在，无法修改为非背景图片。');
                        // var self = this;
                        setTimeout(function() {
                            // $(self).parent().parent().prev().find('input').iCheck('check');
                            icheck.eq(0).iCheck('check');
                        }, 50);
                        return;
                    }
                }
                selectEl.removeAttr('disabled').off('blur').on('blur', function() {
                    var self = this;
                    setTimeout(function() {
                        if ($(self).val() == '' && !$(self).prop("disabled")) {
                            toastr.warning('非背景图片必须有所在背景图，请选择' + item.id + '号图片所属背景。');
                            // $(self).focus();
                            // $(self).css('border-color', 'red').parent().prev().css('color', 'red');
                            $(self).addClass('redSelect').parent().prev().addClass('redSelect');
                        }
                    }, 50);
                }).focus();
                icheck.eq(2).iCheck('disable');
                el.find('input[name="' + code + '_style"]').removeAttr('readonly');
                el.find('input[name="' + code + '_endStyle"]').removeAttr('readonly');
                el.find('input[name="' + code + '_animation"]').removeAttr('readonly');
            });
            if (item.background == 0) {
                icheck.eq(1).iCheck('check');
            } else {
                icheck.eq(0).iCheck('check');
            }
            icheck.eq(2).attr('value', item.id);
            if (item.wish_in == 1) {
                icheck.eq(2).iCheck('check');
            }
            selectEl.change(function() {
                if ($(this).val()) {
                    var ss = $('select'),
                        count = 0;
                    for (var i = 0; i < ss.length; i++) {
                        if ($(ss[i]).val() == $(this).val()) {
                            count++;
                        }
                    }
                    if (count > 10) {
                        toastr.warning('你选择的所属背景图片（' + $(this).val() + '）已经有10，无法再选择。');
                        var self = this;
                        setTimeout(function() {
                            $(self).val('');
                        }, 50);
                    }
                    $(this).removeClass('redSelect').parent().prev().removeClass('redSelect');
                } else {
                    // var c = $(this).parent().prev().prev().find('.icheckInput:checked').val();
                    if (icheck.eq(1).prop('checked')) { // c == 0
                        $(this).addClass('redSelect').parent().prev().addClass('redSelect');
                    } else {
                        $(this).removeClass('redSelect').parent().prev().removeClass('redSelect');
                    }
                }
            });
            var styleText = '';
            if (item.style) {
                item.style = item.style.substr(0, item.style.length - 1);
                if (common.animationType.indexOf($.trim(item.style.split(';').pop().split(':')[0])) > -1) {
                    var lastIndex = item.style.lastIndexOf(';');
                    styleText = item.style.substr(0, lastIndex + 1);
                } else {
                    styleText = item.style + ';';
                }
            }
            el.find('input[name="' + code + '_style"]').val(styleText).blur(function() {
                $(this).val(common.formatStyle($(this).val()));
            });
            if (item.animation) {
                var animationObj = JSON.parse(item.animation);
                var endStyleText = '';
                for (var i in animationObj.animation) {
                    endStyleText += i + ': ' + animationObj.animation[i] + '; '
                }
                endStyleText = endStyleText.substr(0, endStyleText.length - 1);
            } else {
                var endStyleText = '';
            }
            el.find('input[name="' + code + '_endStyle"]').val(endStyleText).blur(function() {
                $(this).val(common.formatStyle($(this).val()));
            });
            if (animationObj) {
                delete animationObj.animation;
                var animationText = '';
                for (var i in animationObj) {
                    animationText += i + ': ' + animationObj[i] + '; '
                }
                animationText = animationText.substr(0, animationText.length - 1);
            }
            el.find('input[name="' + code + '_animation"]').val(animationText).blur(function() {
                $(this).val(common.formatStyle($(this).val()));
            });
            $('[data-toggle="tooltip"]').tooltip();
        }
    }
});